import router from '@/router/index'
import { getToken } from '@/composables/auth'
import { hidePageLoading, showMessage, showPageLoading } from '@/composables/utils'
import { useBlogSettingsStore } from './stores/blogsettings'
import { useUserStore } from './stores/user'

// 全局路由前置守卫
router.beforeEach((to, from, next) => {
    console.log('==> 全局路由前置守卫')
    //显示加载条
    showPageLoading()
    let token = getToken()
    //如果用户未登录访问admin资源，则跳转到login页面
    if (!token && to.path.startsWith('/admin')) {
        showMessage("用户未登录，请先登录再访问！", "warning")
        next({path: '/login'})
    } else if (token && to.path == '/login') {
        // 获取用户信息
        let userStore = useUserStore()
        userStore.setUserInfo()
        let userMessage = userStore.userInfo
        if (userMessage && userMessage.isAdmin) {
            //如果用户信息已经存在，且为管理员用户，则直接进入后台主页
            showMessage("用户已登录成功")
            next({path: "/admin/index"})
        } else {
            //如果用户信息不存在，或不是管理员用户，则跳转到登录页面
            showMessage("用户权限不足，无法进入后台管理页面！", "warning")
            // 跳转到博客主页
            next({path: "/index"})
        }
    } else if (token && to.path.startsWith('/admin')) {
        // 获取用户信息
        let userStore = useUserStore()
        userStore.setUserInfo()
        let userMessage = userStore.userInfo
        if (userMessage && userMessage.isAdmin) {
            next()
        } else {
            showMessage("用户权限不足，无法进入后台管理页面！", "warning")
            // 跳转到博客主页
            next({path: "/index"})
        }
    } else if (!to.path.startsWith('/admin')) {
        // 获取博客设置信息
        let blogSettingsStore = useBlogSettingsStore()
        blogSettingsStore.getBlogSettings()
        next()
    } else if (!token && to.path.startsWith('/safeguard')) {
        showMessage("用户未登录，请先登录再访问！", "warning")
        next({path: '/user/login'})
    } else if (token && to.path == '/user/login') {
        showMessage("用户已登录成功")
        next({path: "/safeguard/user/person/center"})
    }
    else {
        next()
    }
})

// 全局路由后置守卫
router.afterEach((to, from) => {
     // 动态设置页面 Title
     let title = (to.meta.title ? to.meta.title : '')
     document.title = title

     //隐藏显示条
     hidePageLoading()
})
